From 761bc92430a11def142bc26c834238d5252282a8 Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Fri, 23 Mar 2007 11:04:51 +0000 Subject: [PATCH] Fix state in xm list; add state to VM_metrics class. Signed-off-by: Tom Wilkie --- tools/python/xen/xend/XendAPI.py | 4 ++++ tools/python/xen/xend/XendVMMetrics.py | 25 +++++++++++++++++++++++++ tools/python/xen/xm/main.py | 13 ++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/tools/python/xen/xend/XendAPI.py b/tools/python/xen/xend/XendAPI.py index 72b93ee112..4c2ba32ae0 100644 --- a/tools/python/xen/xend/XendAPI.py +++ b/tools/python/xen/xend/XendAPI.py @@ -1608,6 +1608,7 @@ class XendAPI(object): 'VCPUs_CPU', 'VCPUs_flags', 'VCPUs_params', + 'state', 'start_time'] VM_metrics_attr_rw = [] VM_metrics_methods = [] @@ -1642,6 +1643,9 @@ class XendAPI(object): def VM_metrics_get_start_time(self, _, ref): return xen_api_success(self._VM_metrics_get(ref).get_start_time()) + def VM_metrics_get_state(self, _, ref): + return xen_api_success(self._VM_metrics_get(ref).get_state()) + # Xen API: Class VBD # ---------------------------------------------------------------- diff --git a/tools/python/xen/xend/XendVMMetrics.py b/tools/python/xen/xend/XendVMMetrics.py index 217d9c2096..2ba328a5cd 100644 --- a/tools/python/xen/xend/XendVMMetrics.py +++ b/tools/python/xen/xend/XendVMMetrics.py @@ -97,6 +97,30 @@ class XendVMMetrics: else: return {} + def get_state(self): + try: + domid = self.xend_domain_instance.getDomid() + domlist = xc.domain_getinfo(domid, 1) + if domlist and domid == domlist[0]['domid']: + dominfo = domlist[0] + + states = [] + def addState(key): + if dominfo[key] == 1: + states.append(key) + + addState("running") + addState("blocked") + addState("paused") + addState("dying") + addState("crashed") + addState("shutdown") + return ",".join(states) + except Exception, err: + # ignore missing domain + log.trace("domain_getinfo(%d) failed, ignoring: %s", domid, str(err)) + return "" + def get_VCPUs_params(self): domid = self.xend_domain_instance.getDomid() if domid is not None: @@ -125,4 +149,5 @@ class XendVMMetrics: 'VCPUs_flags' : self.get_VCPUs_flags(), 'VCPUs_params' : self.get_VCPUs_params(), 'start_time' : self.get_start_time(), + 'state' : self.get_state(), } diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 7814b43438..64362fe08f 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -715,10 +715,21 @@ def getDomains(domain_names, state, full = 0): dom_rec = server.xenapi.VM.get_record(dom_ref) dom_metrics_ref = server.xenapi.VM.get_metrics(dom_ref) dom_metrics = server.xenapi.VM_metrics.get_record(dom_metrics_ref) + + states = ('running', 'blocked', 'paused', 'shutdown', + 'crashed', 'dying') + def state_on_off(state): + if dom_metrics['state'].find(state) > -1: + return state[0] + else: + return "-" + state_str = "".join([state_on_off(state) + for state in states]) + dom_rec.update({'name': dom_rec['name_label'], 'memory_actual': int(dom_metrics['memory_actual'])/1024, 'vcpus': dom_metrics['VCPUs_number'], - 'state': '-----', + 'state': state_str, 'cpu_time': dom_metrics['VCPUs_utilisation'], 'start_time': dom_metrics['start_time']}) -- 2.30.2